<?php
/**
 * 定义 Controller_Request_Abstract 类
 * 
 * @copyright Copyright (c) 2008 Classic Reappear Technology LLC
 * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
 * @version $Id: abstract.php 2009-2-27 下午02:30:45 蓝色身份 $
 */

/**
 * 控制器请求传递抽象类
 *
 * @author 蓝色身份 <lance.w@live.cn>
 * @copyright Copyright (c) 2008 Classic Reappear Technology LLC
 * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
 * @package Controller
 * @subpackage Request
 */
abstract class Controller_Request_Abstract
{
    /**
     * 请求是否已经发送
     *
     * @var boolean
     */
    protected $_dispatched = false;

    /**
     * 模块名称
     *
     * @var string
     */
    protected $_module;

    /**
     * 用于检索模块名称的标识
     *
     * @var string
     */
    protected $_moduleKey = 'module';

    /**
     * 控制器名称
     *
     * @var string
     */
    protected $_controller;

    /**
     * 用于检索控制器名称的标识
     *
     * @var string
     */
    protected $_controllerKey = 'controller';

    /**
     * 动作名称
     *
     * @var string
     */
    protected $_action;

    /**
     * 用于检索动作名称的标识
     *
     * @var string
     */
    protected $_actionKey = 'action';

    /**
     * 获取模块名称
     *
     * @return string
     */
    public function getModuleName()
    {
        if (null === $this->_module) {
            $this->_module = $this->getParam($this->getModuleKey());
        }

        return $this->_module;
    }

    /**
     * 设置模块名称
     *
     * @param string $value 模块名称
     * @return Controller_Request_Abstract
     */
    public function setModuleName($value)
    {
        $this->_module = $value;
        return $this;
    }

    /**
     * 获取控制器名称
     *
     * @return string
     */
    public function getControllerName()
    {
        if (null === $this->_controller) {
            $this->_controller = $this->getParam($this->getControllerKey());
        }

        return $this->_controller;
    }

    /**
     * 设置控制器名称
     *
     * @param string $value 控制器名称
     * @return Controller_Request_Abstract
     */
    public function setControllerName($value)
    {
        $this->_controller = $value;
        return $this;
    }

    /**
     * 获取动作名称
     *
     * @return string
     */
    public function getActionName()
    {
        if (null === $this->_action) {
            $this->_action = $this->getParam($this->getActionKey());
        }

        return $this->_action;
    }

    /**
     * 设置动作名称
     *
     * @param string $value 动作名称
     * @return Controller_Request_Abstract
     */
    public function setActionName($value)
    {
        $this->_action = $value;
        return $this;
    }

    /**
     * 返回用于检索模块名称的标识
     *
     * @return string
     */
    public function getModuleKey()
    {
        return $this->_moduleKey;
    }

    /**
     * 设置用于检索模块名称的标识
     *
     * @param string $key 用于检索模块名称的标识
     * @return Controller_Request_Abstract
     */
    public function setModuleKey($key)
    {
        $this->_moduleKey = (string) $key;
        return $this;
    }

    /**
     * 返回用于检索控制器名称的标识
     *
     * @return string
     */
    public function getControllerKey()
    {
        return $this->_controllerKey;
    }

    /**
     * 设置用于检索控制器名称的标识
     *
     * @param string $key 用于检索控制器名称的标识
     * @return Controller_Request_Abstract
     */
    public function setControllerKey($key)
    {
        $this->_controllerKey = (string) $key;
        return $this;
    }

    /**
     * 返回用于检索动作名称的标识
     *
     * @return string
     */
    public function getActionKey()
    {
        return $this->_actionKey;
    }

    /**
     * 设置用于检索动作名称的标识
     *
     * @param string $key 用于检索动作名称的标识
     * @return Controller_Request_Abstract
     */
    public function setActionKey($key)
    {
        $this->_actionKey = (string) $key;
        return $this;
    }

    /**
     * 设置请求发送标志
     *
     * @param boolean $flag 请求发送标志
     * @return Controller_Request_Abstract
     */
    public function setDispatched($flag = true)
    {
        $this->_dispatched = $flag ? true : false;
        return $this;
    }

    /**
     * 检查请求是否已经发送
     *
     * @return boolean
     */
    public function isDispatched()
    {
        return $this->_dispatched;
    }
}